<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Migration Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>
@import url('../userguide.css');
</style>
<link rel='stylesheet' type='text/css' media='all'
	href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv='pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='CodeIgniter Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

	<!-- START NAVIGATION -->
	<div id="nav">
		<div id="nav_inner">
			<script type="text/javascript">create_menu('../');</script>
		</div>
	</div>
	<div id="nav2">
		<a name="top"></a><a href="javascript:void(0);"
			onclick="myHeight.toggle();"><img
			src="../images/nav_toggle_darker.jpg" width="154" height="43"
			border="0" title="Toggle Table of Contents"
			alt="Toggle Table of Contents" /></a>
	</div>
	<div id="masthead">
		<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
			<tr>
				<td><h1>CodeIgniter User Guide Version 2.1.3</h1></td>
				<td id="breadcrumb_right"><a href="../toc.html">Table of
						Contents Page</a></td>
			</tr>
		</table>
	</div>
	<!-- END NAVIGATION -->


	<!-- START BREADCRUMB -->
	<table cellpadding="0" cellspacing="0" border="0" style="width: 100%">
		<tr>
			<td id="breadcrumb"><a href="http://codeigniter.com/">CodeIgniter
					Home</a> &nbsp;&#8250;&nbsp; <a href="../index.html">User Guide
					Home</a> &nbsp;&#8250;&nbsp; Migration Class</td>
			<td id="searchbox"><form method="get"
					action="http://www.google.com/search">
					<input type="hidden" name="as_sitesearch" id="as_sitesearch"
						value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input
						type="text" class="input" style="width: 200px;" name="q" id="q"
						size="31" maxlength="255" value="" />&nbsp;<input type="submit"
						class="submit" name="sa" value="Go" />
				</form></td>
		</tr>
	</table>
	<!-- END BREADCRUMB -->

	<br clear="all" />


	<!-- START CONTENT -->
	<div id="content">


		<h1>Migration Class</h1>

		<p>Migrations are a convenient way for you to alter your database
			in a structured and organized manner. You could edit fragments of SQL
			by hand but you would then be responsible for telling other
			developers that they need to go and run them. You’d also have to keep
			track of which changes need to be run against the production machines
			next time you deploy.</p>

		<p>
			The database table
			<var>migration</var>
			tracks which migrations have already been run so all you have to do
			is update your application files and call
			<dfn>$this->migrate->current()</dfn>
			to work out which migrations should be run. The current version is
			found in
			<var>config/migration.php</var>
			.
		</p>

		<h2>Create a Migration</h2>

		<p>
			This will be the first migration for a new site which has a blog. All
			migrations go in the folder
			<var>application/migrations/</var>
			and have names such as:
			<kbd>001_add_blog.php</kbd>
			.
		</p>

		<pre>
defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

	public function up()
	{
		$this->dbforge->add_field(array(
			'blog_id' => array(
				'type' => 'INT',
				'constraint' => 5,
				'unsigned' => TRUE,
				'auto_increment' => TRUE
			),
			'blog_title' => array(
				'type' => 'VARCHAR',
				'constraint' => '100',
			),
			'blog_description' => array(
				'type' => 'TEXT',
				'null' => TRUE,
			),
		));
		
		$this->dbforge->create_table('blog');
	}

	public function down()
	{
		$this->dbforge->drop_table('blog');
	}
</pre>

		<p>
			Then in
			<var>application/config/migration.php</var>
			set
			<dfn>$config['migration_version'] = 1;</dfn>
			.
		<h2>Usage Example</h2>

		<p>
			In this example some simple code is placed in
			<var>application/controllers/migrate.php</var>
			to update the schema.
		</p>

		<pre>
$this->load->library('migration');

if ( ! $this->migration->current())
{
	show_error($this->migration->error_string());
}
</pre>


		<h1>Function Reference</h1>

		<h2>$this->migration->current()</h2>

		<p>
			The current migration is whatever is set for
			<dfn>$config['migration_version']</dfn>
			in
			<var>application/config/migration.php</var>
			.
		</p>


		<h2>$this->migration->latest()</h2>

		<p>
			This works much the same way as current() but instead of looking for
			the
			<dfn>$config['migration_version']</dfn>
			the Migration class will use the very newest migration found in the
			filesystem.
		</p>

		<h2>$this->migration->version()</h2>

		<p>
			Version can be used to roll back changes or step forwards
			programmatically to specific versions. It works just like current but
			ignores
			<dfn>$config['migration_version']</dfn>
			.
		</p>

		<pre>
$this->load->library('migration');

$this->migration->version(5);
</pre>

		<h2>Migration Preferences</h2>

		<p>The following is a list of all the config options for
			migrations.</p>


		<table cellpadding="0" cellspacing="1" border="0" style="width: 100%"
			class="tableborder">
			<tr>
				<th>Preference</th>
				<th>Default&nbsp;Value</th>
				<th>Options</th>
				<th>Description</th>
			</tr>
			<tr>
				<td class="td"><strong>migration_enabled</strong></td>
				<td class="td">FALSE</td>
				<td class="td">TRUE / FALSE</td>
				<td class="td">Enable or disable migrations.</td>
			</tr>
			<tr>
				<td class="td"><strong>migration_version</strong></td>
				<td class="td">0</td>
				<td class="td">None</td>
				<td class="td">The current version your database should use.</td>
			</tr>
			<tr>
				<td class="td"><strong>migration_path</strong></td>
				<td class="td">APPPATH.'migrations/'</td>
				<td class="td">None</td>
				<td class="td">The path to your migrations folder.</td>
			</tr>
		</table>


	</div>
	<!-- END CONTENT -->


	<div id="footer">
		<p>
			Previous Topic:&nbsp;&nbsp;<a href="form_validation.html">Form
				Validation Class</a> &nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a
				href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp; <a
				href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
			Next Topic:&nbsp;&nbsp;<a href="table.html">HTML Table Class</a>
		</p>
		<p>
			<a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp;
			Copyright &#169; 2006 - 2012 &nbsp;&middot;&nbsp; <a
				href="http://ellislab.com/">EllisLab, Inc.</a>
		</p>
	</div>

</body>
</html>